package ahjava.p11other;
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.AudioFormat.Encoding;
public class Mp3 {
	public static void main(String[] args) throws Exception {
		// AudioInputStream 音频流
		// AudioFormat 音频格式 mid wav mp3
		// SourceDataLine 数据源行
		// AudioSystem 音频提取
		// File file = new File("E:\\DocumentsFiles\\KW\\song\\Basketball.wav");
		// ===============================================================
		// 默认只支持wav,mid
		// 使用第三方工具mp3spi1.9.5，不用改代码，可支持mp3。
		// 核心包：mp3spi1.9.5.jar
		// 依赖包：lib/tritonus_share.jar
		// 依赖包：lib/jl1.0.1.jar
		String PROJ_PATH = "C:/Users/Administrator/Workspaces/MyEclipse 2015/Ah01JspJavaHtml/";
		File file = new File(PROJ_PATH + "WebRoot/01HtmlCssJs/1_HTML/AudioVideo/007.mp3");
		// 音频提取器提取音频流
		AudioInputStream ais = AudioSystem.getAudioInputStream(file);
		// 获取原始音频的格式
		AudioFormat oldFormat = ais.getFormat();
		// 对音频编码
		AudioFormat targetFormat = new AudioFormat(Encoding.PCM_SIGNED, oldFormat.getSampleRate(),
				16, oldFormat.getChannels(), oldFormat.getChannels() * 2,
				oldFormat.getSampleRate(), false);
		// 产生编码后的输入流
		AudioInputStream ais2 = AudioSystem.getAudioInputStream(targetFormat, ais);
		// 对音频行提取
		DataLine.Info info = new DataLine.Info(SourceDataLine.class, targetFormat);
		// 创建音频行的对象
		SourceDataLine sdl = (SourceDataLine) AudioSystem.getLine(info);
		// 打开音频行
		sdl.open(targetFormat);
		// 开始音频行读取
		sdl.start();
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = ais2.read(buf)) != -1) {
			sdl.write(buf, 0, len);
		}
		// 声卡调用结束
		sdl.stop();
		// 音频行关闭
		sdl.close();
		// 音频流关闭
		ais2.close();
		ais.close();
	}
}
